package peca;
import javax.swing.ImageIcon;

import estrutura.Celula;
import estrutura.Peca;


public class Peao extends Peca{
		
	public Peao(CorPeca cor) {
		 StringBuilder caminhoImagem = new StringBuilder("images/peao");
		 caminhoImagem.append(cor.sufix()).append(".png");
		 setImagem(new ImageIcon(getClass().getClassLoader().getResource(caminhoImagem.toString())));
		 setCor(cor);
		 setNome(cor == CorPeca.BRANCA ? PEAO_B : PEAO_P);
	}

	public Peao() {}

	@Override
	public boolean isMovimentoValido(Celula origem, Celula destino, Celula[][] celulas) {
		
		if(isRotaValida(origem, destino) && isNotPecaNoCaminho(origem, destino, celulas)){
			return true;
		}
		
		return false;
	}

	private boolean isRotaValida(final Celula origem, final Celula destino) {
		boolean primeiroMovimento = origem.getPeca().getCor()==CorPeca.BRANCA ? origem.getLinha()==6 : origem.getLinha()==1;
		int sigma = origem.getPeca().getCor()==CorPeca.PRETA ? -1 : 1;
		int o = Integer.parseInt(origem.getText());
		int d = Integer.parseInt(destino.getText());
		int resultado = o - d;
		return primeiroMovimento && resultado == 20 * sigma || resultado == 11 * sigma || resultado == 10 * sigma || resultado == 9 * sigma;
	}
	
	private boolean isNotPecaNoCaminho(Celula origem, Celula destino, Celula[][] celulas) {
		int o = Integer.parseInt(origem.getText());
		int d = Integer.parseInt(destino.getText());
		int resultado = o - d;
		int sigma = origem.getPeca().getCor()==CorPeca.PRETA ? -1 : 1;

		if(resultado == 11 * sigma || resultado == 9 * sigma){
			return destino.getPeca()!=null && origem.getPeca().getCor() != destino.getPeca().getCor();
		}

		final int X = destino.getLinha()-origem.getLinha();				
		int linhaOrigem = origem.getLinha();
		int colunaOrigem = origem.getColuna();
		while(Integer.signum(destino.getLinha()-linhaOrigem)==-1 ? linhaOrigem>destino.getLinha() : linhaOrigem<destino.getLinha()){
			linhaOrigem = linhaOrigem + Integer.signum(X);	
			Celula celula = celulas[linhaOrigem][colunaOrigem];
			if(celula.getPeca()!=null){
				return false;
			}
		}			
					
		return true;
	}	
	
			
}
